<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>

<style>
    div {
        margin: 200px;
    }

    span {
        display: inline-block;
        width: 40px;
        height: 40px;
        background-color: #333;
        font-size: 20px;
        color: #fff;
        text-align: center;
        line-height: 40px;
    }
</style>
<body>

<div>
    <span class="hour">1</span>
    <span class="minute">2</span>
    <span class="second">3</span>
</div>

<script>

    // 1.获取元素
    var hour = document.querySelector('.hour');
    var minute = document.querySelector('.minute');
    var second = document.querySelector('.second');
    // 返回的是用户输入时间总的毫秒数
    var inputTime = +new Date('2021-11-15 18:00:00');
    // 第一次执行也是有间隔毫秒数, 因此刚刷新页面还有空白
    // 我们先调用一次这个函数, 防止第一次刷新页面有空白
    countDown();

    var timeId = window.setInterval(countDown, 1000);


    function countDown() {
        // 返回的是当前时间总的毫秒数
        var nowTime = +new Date();
        // times是剩余时间总的秒数
        var times = (inputTime - nowTime) / 1000;

        var h = parseInt(times / 60 / 60 % 24 + '');   // 时
        h = h < 10 ? '0' + h : h;
        hour.innerHTML = h;      // 把剩余的小时给小时黑色盒子

        var m = parseInt(times / 60 % 60 + '');        // 分
        m = m < 10 ? '0' + m : m;
        minute.innerHTML = m;      // 把剩余的分钟给分钟黑色盒子

        var s = parseInt(times % 60 + '');             // 秒
        s = s < 10 ? '0' + s : s;
        second.innerHTML = s;      // 把剩余的秒给秒黑色盒子
    }

</script>
</body>
</html>
